package everyday;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/6/30 21:50
 * 3. 无重复字符的最长子串
 * https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
 */
public class Solution03 {

    // 哈希思想 + 滑动窗口
    public int lengthOfLongestSubstring(String ss) {
        int[] hash = new int[128];  // 数组模拟哈希表
        char[] s = ss.toCharArray();
        int n = s.length;
        int left = 0, right = 0;  // 窗口边界
        int ret = 0;  // 记录结果
        while (right < n) {
            // 进入窗口
            hash[s[right]]++;
            // 判断
            while (hash[s[right]] > 1) {
                // 出窗口
                hash[s[left++]]--;
            }
            // 更新结果
            ret = Math.max(ret, right - left + 1);
            right++;
        }
        return ret;
    }
}
